りおんクロニクル


C# × セキュリティ(JWT / 認証)|API保護・トークン発行・検証の実務ガイド【2026年版】

Home【2026年版】C# / .NET入門と実践ガイド|基礎・業務アプリ開発・SQLite連携まで体系的に解説

C#でAPIを作るなら、 JWT(JSON Web Token) による認証はほぼ必須です。 Web API、デスクトップアプリ、モバイルアプリ、クラウド連携など、 あらゆる場面で使われています。

この記事でわかること
・JWTの仕組み(Header / Payload / Signature)
・C#でのJWT発行(署名付き)
・ASP.NET Core Web APIでのJWT認証
・ロール(権限)管理
・リフレッシュトークンの考え方
・業務アプリ向けセキュリティ設計

1. JWTとは?(超要点)

JWTは、次の3つを「.」でつないだ文字列です。

Header.Payload.Signature

JWTはサーバー側でセッションを持たず、 トークンそのものに情報を持たせるのが特徴です。

2. C#でJWTを発行する(HS256)

■ 2-1. 必要なパッケージ

dotnet add package System.IdentityModel.Tokens.Jwt

■ 2-2. トークン発行コード

using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Security.Claims;
using System.Text;

public string GenerateJwt(string userId)
{
    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey12345"));
    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

    var claims = new[]
    {
        new Claim(JwtRegisteredClaimNames.Sub, userId),
        new Claim("role", "Admin")
    };

    var token = new JwtSecurityToken(
        issuer: "your-app",
        audience: "your-app",
        claims: claims,
        expires: DateTime.UtcNow.AddHours(1),
        signingCredentials: creds
    );

    return new JwtSecurityTokenHandler().WriteToken(token);
}

署名キーは必ず長く・複雑にするのが鉄則です。

3. ASP.NET Core Web APIでJWT認証を有効化

■ 3-1. Program.cs に認証設定を追加

builder.Services.AddAuthentication("Bearer")
    .AddJwtBearer("Bearer", options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "your-app",
            ValidAudience = "your-app",
            IssuerSigningKey = new SymmetricSecurityKey(
                Encoding.UTF8.GetBytes("YourSecretKey12345"))
        };
    });

builder.Services.AddAuthorization();

■ 3-2. 認証ミドルウェアを有効化

app.UseAuthentication();
app.UseAuthorization();

■ 3-3. 認証が必要なAPI

[Authorize]
[HttpGet("secure")]
public IActionResult SecureEndpoint()
{
    return Ok(new { Message = "認証成功" });
}

Bearer トークンを付けて呼び出すとアクセスできます。

4. ロール(権限)管理

■ 4-1. JWTにロールを含める

new Claim(ClaimTypes.Role, "Admin")

■ 4-2. ロール制限付きAPI

[Authorize(Roles = "Admin")]
[HttpGet("admin")]
public IActionResult AdminOnly()
{
    return Ok("管理者専用API");
}

ロール管理は業務アプリで非常に重要です。

5. リフレッシュトークン(長期ログイン)

JWTは短命(1時間など)にし、 長期ログインはリフレッシュトークンで実現します。

■ リフレッシュトークンの特徴

セキュリティを高めるための必須パターンです。

6. デスクトップアプリ(WPF/WinForms)でのJWT利用

デスクトップアプリでも、 API呼び出し時にBearerトークンを付与するだけでOKです。

■ 6-1. HttpClientでBearerトークンを付与

_http.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", jwtToken);

ログイン後にトークンを保持し、API呼び出しに利用します。

7. セキュリティ強化のポイント(実務)

まとめ:JWTは“軽量で強力な認証基盤”になる

「APIを安全にしたい」「ログイン機能を作りたい」 というニーズに対して、 JWTは最も実務的で強力な選択肢です。 この記事をベースに、あなたのアプリに最適な認証基盤を設計してみてください。

前のページ  次のページ